home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Xconq 7.1.0 / lib / postmodern.g < prev    next >
Text File  |  1996-04-04  |  26KB  |  757 lines

  1. (game-module "postmodern"
  2.   (blurb "An elaborated version of the standard game")
  3.   (title "of surviving city-states struggling for control of the apocalypse's ruins...")
  4.   (variants
  5.    (world-seen false)
  6.    (see-all false)
  7.    )
  8.   )
  9.  
  10. ; possibly radar should get no moves - you have to embark it explicitly ?
  11. ; but then you can't disembark it.
  12.  
  13. ;
  14. (unit-type i (name "infantry") (char "i")
  15.   (help "marches around and captures things"))
  16. (unit-type a (name "armor") (char "a")
  17.   (help "faster than infantry, limited to open terrain"))
  18. (unit-type S (name "Special Forces") (char "S")
  19.   (help "special infiltration units"))
  20. (unit-type r (name "radar") (char "r")
  21.   (help "small device that sees far"))
  22. (unit-type A (name "airlifter") (char "A")
  23.   (help "big cargo plane, for moving supplies and troops"))
  24. (unit-type f (name "fighter") (char "f")
  25.   (help "interceptor to get those nasty Aircraft"))
  26. (unit-type b (name "bomber") (char "b")
  27.   (help "long range aircraft, carries infantry and bombs"))
  28. (unit-type d (name "destroyer") (char "d")
  29.   (help "fast, cheap, and sinks subs"))
  30. (unit-type s (name "submarine") (char "s")
  31.   (help "sneaks around and sinks ships"))
  32. (unit-type m (name "sea mines") (char "m")
  33.   (help "sea mine, floats around, sinks shps"))
  34. (unit-type t (name "transport ship") (char "t")
  35.   (help "carries units and supplies across the water"))
  36. (unit-type j (name "jeep") (char "j")
  37.   (help "trucks and jeeps for moving infantry and supplies"))
  38. (unit-type X (name "mech infantry") (char "X")
  39.   (help "infantry in powered armor and AFVs"))
  40. (unit-type C (name "carrier") (char "C")
  41.   (help "carries aircraft around"))
  42. (unit-type z (name "spy plane") (char "z")
  43.   (help "fast, hard to see spy craft"))
  44. (unit-type B (name "battleship") (char "B")
  45.   (help "the most powerful ship"))
  46. (unit-type G (name "missile") (char "G")
  47.   (help "powerful explosive, Very accurate"))
  48. (unit-type N (name "atomic") (char "N")
  49.   (help "nuclear fuel unit, or nuclear bomb"))
  50. (unit-type e (name "engineers") (char "e")
  51.   (help "produces things, fights sieges"))
  52. (unit-type O (name "bolo") (char "O")
  53.   (help "huge CyberTank - a veritable land battleship"))
  54. (unit-type L (name "land fortifications") (char "L")
  55.   (help "Hold those enemies at bay!"))
  56. (unit-type & (name "bridge") (char "&")
  57.   (help "serves as something units can walk over"))
  58. (unit-type / (name "base") (char "/")
  59.   (help "airstrip plus port"))
  60. (unit-type V (name "village") (char "V")
  61.   (help "small town"))
  62. (unit-type * (name "town") (char "*")
  63.   (help "smaller than a city"))
  64. (unit-type @ (name "city") (char "@")
  65.   (help "capital of a side"))
  66.  
  67. (material-type fuel (help "basic motive power"))
  68. (material-type ammo (help "generic hitting capability"))
  69. (material-type people (help "population, used to stock cities, operate units"))
  70.  
  71. (terrain-type sea (char ".") (color "sky blue"))
  72. (terrain-type shallows (char ",") (color "cyan"))
  73. (terrain-type swamp (char "=") (color "yellowgreen"))
  74. (terrain-type desert (char "~") (color "yellow"))
  75. (terrain-type plains (char "+") (color "green"))
  76. (terrain-type forest (char "%") (color "forest green"))
  77. (terrain-type mountains (char "^") (color "sienna"))
  78. (terrain-type ice (char "_") (color "white"))
  79. (terrain-type vacuum (char ":") (color "black"))
  80.  
  81. (add i image-name "man")
  82. (add a image-name "tank")
  83. (add S image-name "elite")
  84. (add r image-name "radar")
  85. (add A image-name "airlift")
  86. (add f image-name "jets")
  87. (add b image-name "bomber")
  88. (add d image-name "small-ship")
  89. (add s image-name "sub")
  90. (add m image-name "fortress")    ; hey, that icon makes a good mine!
  91. (add t image-name "cargo-ship")
  92. (add j image-name "jeep")
  93. (add X image-name "mech")
  94. (add C image-name "carrier")
  95. (add z image-name "spysat")
  96. (add B image-name "battleship")
  97. ;"engineer" e icon-name
  98. (add e image-name "tractor")
  99. (add G image-name "missile")
  100. (add N image-name "bomb")
  101. (add O image-name "ogre")
  102. (add L image-name "walltown")
  103. (add & image-name "bridge")
  104. (add / image-name "airbase")
  105. (add V image-name "village")
  106. (add * image-name "town20")
  107. (add @ image-name "city20")
  108.  
  109. (define bases ( L & / V * @ ))
  110. (define cities ( V * @ ))
  111. (define makers ( V * @ ))
  112. (define ground ( i a e S j X O ))
  113. (define aircraft ( A f b G z ))
  114. (define ships ( d s m t C B ))
  115. (define movers ( i a S r A f b d s m t j X C z B G N e O ))
  116. (define water ( sea shallows ))
  117. (define land ( plains forest desert mountains ))
  118.  
  119. ;;; Static relationships.
  120.  
  121. ;; Unit-unit.
  122.  
  123. (table unit-capacity-x
  124.   (u* r 1)    ; all units can have radar
  125.   (( S z ) r 0)    ; radar gives away their position - they use passive
  126.   (f G 4) ; fighters carry missiles
  127.   (d ( m G ) ( 8 2 )) ; destroyers - sea mines and missiles
  128.   (X ( G N ) ( 20 1 )) ; mech infantry - missiles and a nuke
  129.   (G N 1) ; a missile can be a nuke carrier
  130.   (A ( i a S j X m O e ) ( 2 1 2 3 1 10 1 1 )) ; airlifter - alot
  131.   (a (i S) 1) ; armor - a single troop
  132.   (b ( i S m j N r G )
  133.      ( 1 1 6 1 2 1 4 )) ; bombers - troops, sea mines, missiles, nukes, jeeps, radar
  134.   (s ( S N G )
  135.      ( 1 2 4 ))
  136.   (t ( i a S j X m  O G e )
  137.      ( 6 3 8 8 3 12 1 6 2 ))
  138.   (j ( i S X G e )
  139.      ( 3 3 2 3 1 ))
  140.   (C ( f  b m z G  N )
  141.      ( 10 3 6 2 10 2 ))
  142.   (B ( i S m G N ) 8)
  143.   (G N 3)
  144.   (O ( G N ) ( 6 3 ))
  145.   (bases u* 40)
  146.   (bases bases 0)
  147.   )
  148.  
  149. (add u* capacity 0)
  150. (add (i a S A b s t j C B O) capacity
  151.      (1 1 1 4 2 2 6 3 8 1 1))
  152. ;                     L  &  /  V  *  @ "bases"
  153. (add bases capacity ( 3  2  8 12 24 48 ))
  154.  
  155. (table unit-size-as-occupant
  156.   (u* u* 99)
  157.   ( (N G) u* (1 1) ) ; everything carries nukes and missiles
  158.   (ground bases 1)
  159.   ;              d s m t C B "ships"
  160.   (ships bases ( 4 4 1 5 6 6 ))    ; ships are BIG!
  161.   ;                 A f b G z "aircraft"
  162.   (aircraft bases ( 2 1 2 1 1 ))
  163.   ( (i S N G) a (1 1 1 1) ) ; armor
  164.   (( i a S j X m O e ) A (1 1 1 1 1 1 1 1)) ; airlifter
  165.   )
  166.  
  167. (table occupant-max add (u* N 1) )
  168. (table occupant-max add (u* G 2) )
  169. (table occupant-max add (a ( i S ) 1))    ; small groups of troops can ride on armor!
  170. (table occupant-max add (S ( N G ) ( 1 2 )))
  171. (table occupant-max add (A ( i a S j X m O e ) ( 2 1 2 2 1 10 1 1 ))) ; heavy airlifter indeed
  172. (table occupant-max add (b ( i S m j N r G ) ( 1 1 6 1 2 1 4 )))
  173. (table occupant-max add (s ( S N G ) ( 1 2 4 )))
  174. (table occupant-max add (t ( i a S j X m O G e ) ( 6 3 8 8 3 12 1 6 2 )))
  175. (table occupant-max add (j ( i S X G e ) ( 3 3 2 3 1 )))
  176. (table occupant-max add (C ( f b m z G N ) ( 10 3 6 2 10 2 )))
  177. (table occupant-max add (B ( i S m G N ) 8))
  178. (table occupant-max add (G N 3))
  179. (table occupant-max add (O ( G N ) ( 6 3 )))
  180. (table occupant-max add (bases u* 40))
  181. (table occupant-max add (bases bases 0))
  182.  
  183. ;; Unit-terrain.
  184.  
  185. (add t* capacity 16)
  186.  
  187. (table unit-size-in-terrain
  188.   (u* t* 1)
  189.   (( * @ ) t* 12)
  190.   )
  191.  
  192. ;; Unit-material.
  193.  
  194. (table unit-storage-x
  195. ;                   L  &   /   V   *    @ "bases"
  196.   (bases fuel   ( 100 50 100 300 500  500 ))
  197.   (bases ammo   (  70 10  50  80 100  200 ))
  198.   (bases people (   2 1   20 200 400  999 ))
  199. ;                  i  a  S r  A  f  b  d  s m  t  j  X   C  z   B  G  N  e   O "movers"
  200.   (movers fuel   ( 6 10 20 2 40 18 36 99 99 5 99 50 30 400 48 200 20 10 30 180 ))
  201.   (movers ammo   ( 6 10 20 2 40 18 36 99 99 2 99 50 30 400 48 200 20 10 30  80 ))
  202.   (movers people ( 3  1  1 0  2  0  5  4  1 0 20 10  1   8  0   9  0  0 30   0 ))
  203.   )
  204.  
  205. ;;; Vision.
  206.  
  207. ;FIXME visibility is U T -> N, U's % visibility in T
  208. (table visibility add (( S m s z ) t* 0)) ; can't see these unless you step on them
  209. (table visibility add (( G N ) t* 10)) ; missiles and nukes tough to see
  210. ; small forces hidden by rough terrain
  211. (table visibility add ( (i X j) forest 40))
  212. (table visibility add ( (i X j) swamp 30))
  213. (table visibility add ( (i X j) mountains 50))
  214.  
  215. (add ( V * @ ) see-always 1)
  216.  
  217. ;FIXME vision-at-max-range is N, coverage afforded by unit at max range
  218. (add u* vision-range 1)
  219. (add aircraft vision-range 2)
  220. (add (@ * r z m C B) vision-range
  221.      (3 2 6 4 0 3 3))
  222. (add ( s z @ * C B ) vision-range 6)
  223.  
  224. ;;; Actions.
  225.  
  226. ;                          i a S r A f b d s m t j X C  z B  G N e O "movers"
  227. (add movers acp-per-turn ( 1 2 2 1 5 9 6 3 3 1 3 3 2 4 12 4 10 2 1 3 ))
  228.  
  229. (add cities acp-per-turn 1)
  230.  
  231. ;;; Movement.
  232.  
  233. ;(add ( r m ) speed 0)
  234.  
  235. (add cities speed 0)
  236.  
  237. (table mp-to-enter-terrain
  238.   (u* t* 99)
  239.   (ships water 1)    ; sea is pretty straightforward...
  240.   (( s C B ) shallows (2 3 3))    ; big ships don' like shallows
  241.   (ground water 99)
  242.   (( X O ) shallows 3)
  243.   (aircraft t* 1)    ; Aircraft ignore most terrain
  244.   (u* vacuum 99)    ; nothing here can stand vacuum
  245.   (G vacuum 1)    ;  well, missiles can...
  246.   (bases t* 1)    ; bases can go anywhere
  247.   ; movement on terrain...
  248.   (ships land 99)    ; most ships can't go on land too!
  249.   (( d t m ) swamp 1)    ; but swamps are shallow enough for small ones
  250.   ; ground units and land terrain:
  251.   ;Ice... is special.. It's often water covered with ice.
  252.   (ships ice 99)
  253.   (s ice 1)    ; subs can go under ice
  254.   (m water 1); sea mines in the sea
  255.   ; ground units ant how they handle terrain:
  256.   ;               i  a e S  j X O  "ground"
  257.   (ground swamp  (1 99 1 1 3 2 3))    ; most ground units don't like swamp
  258.   (ground desert (1 1 1 1 1 1 1))
  259.   (ground plains (1 1 1 1 1 1 1))    ; plains= big highway
  260.   (ground forest (1 2 1 1 2 1 1))    ;Vehicles must navigate/crush way
  261.   (ground mountains (1 99 1 2 99 2 3))    ; most ground units don't like ice
  262.   (ground ice (99 99 1 2 3 2 2))    ; most ground units don't like ice
  263.   ;Other special moves:
  264.   ;-1 t* r moves ; radar can only operate as a passenger
  265.   (r t* 1)    ;  radar techs can take radar anywhere
  266.   (r water 1)    ; except on water...
  267.   (e t* 1)    ;engineers can go anywhere... but vacuum
  268.   (cities land 1)    ; looks strange, but needed to define allowable places
  269.   )
  270.  
  271. (table consumption-per-move add (movers fuel 1))    ; all units take 1 fuel to move
  272. (table consumption-per-move add (( C B O ) fuel 2))    ; big units take more fuel
  273.  
  274. ;100 u* A alter-mobility
  275. ;(table mp-per-occupant add (G N 90))
  276.  
  277. (table mp-to-enter-unit add (aircraft u* 20))    ; aircraft can't sortie again until next turn
  278. (table mp-to-enter-unit add (bases ships 1))
  279. (table mp-to-leave-unit add (bases ships 1))
  280.  
  281. ;FIXME ferry-on-entry is U1 U2 -> FTYPE how much terrain U2 crosses to board U1
  282. (table ferry-on-entry add (u* u* over-all))    ; lets everything attack everywhere
  283. (table ferry-on-entry add (m u* over-all))    ; mines can't attack across terrain
  284. (table ferry-on-entry add (bases i over-all))    ; infantry can capture cities even on water.
  285.  
  286. ;;; Construction.
  287.  
  288. ; big cities produce a tad faster, especially high tech stuff
  289.  
  290. ;                i  a  S  r  A  f  b  d  s  m  t  j  X  C  z  B  G  N  e  O "movers"
  291. (add movers cp ( 5  9 12  9 13 12 15 13 14  4 11  7 16 45 27 60  7 30 14 45 ))
  292.  
  293. (add bases cp ( 4 1 10 15 30 45 ))
  294.  
  295. (table acp-to-create
  296.   (i L 1)
  297.   (ground / 1)
  298.   (O / 0)
  299.   (e bases 1)
  300.   (makers movers 1)
  301.   (V O 0)
  302.   )
  303.  
  304. (table cp-on-creation
  305.   (i L 1)
  306.   ;           i a e S j X O "ground"
  307.   (ground / ( 7 5 8 1 7 8 0))
  308.   (e bases 1)
  309.   (makers movers 1)
  310.   ;           i  a  S  r  A  f  b  d  s  m  t  j  X  C  z  B  G  N  e  O "movers"
  311.   (* movers ( 2  3  3  4  4  4  6  3  3  2  2  3  5 16 10 21  2  1  3  1 ))
  312.   (@ movers ( 2  3  4  4  4  5  6  4  4  2  3  3  7 19 16 25  3  3  5  8 )) 
  313.   )
  314.  
  315. (table acp-to-build
  316.   (i L 1)
  317.   (ground / 1)
  318.   (e bases 1)
  319.   (makers movers 1)
  320.   (V O 0)
  321.   )
  322.  
  323. (table cp-per-build
  324.   ;          L & / V * @ "bases"
  325.   (e bases ( 2 1 3 1 1 1 ))
  326.   ((* @) N 2)
  327.   )
  328.  
  329. #|  ; leave this out for the moment
  330. (table material-to-build
  331.   (movers people (  4  2  1  0  0  0  0  1  1  0  1  1  2  3  0  3  3  0  3  0 ))
  332.   ; people needed to operate units...
  333.   (L ( ammo fuel people ) ( 3 3 1 ))    ; fortification needs stockpiles!
  334.   (bases people ( 0 0 0 200 400 800 ))    ; bases need to be populated
  335.   )
  336. |#
  337.  
  338.  
  339. (table acp-to-toolup
  340.   (u* u* 1)
  341.   )
  342.  
  343. (table tp-to-build
  344.   (u* u* 0)
  345.   ;; on the average, add about 20% build time for toolup
  346.   ;           i  a  S  r  A  f  b  d  s  m  t  j  X  C  z  B  G  N  e  O "movers"
  347.   (V movers ( 1  2  2  2  2  2  3  2  2  1  2  1  3  9  5 12  1  6  3  9 ))
  348.   (* movers ( 1  2  2  2  2  2  3  2  2  1  2  1  3  9  5 12  1  6  3  9 ))
  349.   (@ movers ( 1  2  2  2  2  2  3  2  2  1  2  1  3  9  5 12  1  6  3  9 ))
  350.   )
  351.  
  352. (table tp-max
  353.   (u* u* 0)
  354.   ;; on the average, add about 20% build time for toolup
  355.   ;           i  a  S  r  A  f  b  d  s  m  t  j  X  C  z  B  G  N  e  O "movers"
  356.   (V movers ( 1  2  2  2  2  2  3  2  2  1  2  1  3  9  5 12  1  6  3  9 ))
  357.   (* movers ( 1  2  2  2  2  2  3  2  2  1  2  1  3  9  5 12  1  6  3  9 ))
  358.   (@ movers ( 1  2  2  2  2  2  3  2  2  1  2  1  3  9  5 12  1  6  3  9 ))
  359.   )
  360.  
  361. ; does all prod time calcs using integer arith.
  362. ;  i   a   S   r   A   f   b   d  s  m  t  j  X  C   z  B   G   N   e   O
  363. ;FIXME this is handled by tech level and research now...
  364. ;FIXME ( 50 100 160 400 100 120 100  60 88 50 58 50 80 12 100  5 360 375 192 60 ) movers research
  365. ;  template for research-contrib...
  366. ;  it is % of research on first unit(vector) that counts toward unit.
  367. ;() () r research-contrib
  368. ;FIXME ( 234 434 284 ) A ( f b z ) research-contrib
  369. ;FIXME ( 388 634 ) ( b r ) G research-contrib
  370. ;FIXME ( 300 50 100 80 ) ( a X B N ) O research-contrib
  371. ;FIXME ( 100 80 ) ( i X ) S research-contrib
  372. ;FIXME 60 z r research-contrib
  373. ;FIXME ( 60 120 50 50 ) ( f b z G ) A research-contrib
  374. ;FIXME ( 50 90 90 100 ) ( A b z G ) f research-contrib
  375. ;FIXME ( 80 90 60 30  ) ( A f z G ) b research-contrib
  376. ;FIXME ( 20 90 70 90  ) ( A f b G ) z research-contrib
  377. ;FIXME ( 40 40 60 50 50 ) ( s m t C B ) d research-contrib
  378. ;FIXME ( 40 40 10 20 20 ) ( s d t C B ) m research-contrib
  379. ;FIXME ( 20 50 20 60 60 ) ( s d m C B ) t research-contrib
  380. ;FIXME ( 50 10 40 60 10 80 40 ) ( f s d t m B N ) C research-contrib
  381. ;FIXME ( 60 10 80 50 60 10 40 ) ( O s d t C m N ) B research-contrib
  382. ;FIXME ( 50 80 ) ( i a ) j research-contrib
  383. ;FIXME ( 100 80 90 ) ( i a S ) X research-contrib
  384. ;FIXME ( 60 80 60 20 40 40 ) ( b m G O C B ) N research-contrib
  385. ;FIXME ( 80 10 ) ( i X ) e research-contrib
  386.  
  387. ; no special materials to make
  388.  
  389. (table supply-on-completion (bases m* 100))    ; we don't start with any materials
  390.  
  391. ;;; Repair.
  392.  
  393. ;FIXME hp-per-repair is U1 U2 -> .01HP that U1 restores to U2 per repair action
  394. ; ...and you have to add...
  395. ; acp-to-repair is U1 U2 -> ACP to do one repair action
  396. (table acp-to-repair add (( / V * @ ) u* 1))
  397. (table acp-to-repair add (( L & e ) u* 1))
  398. (table acp-to-repair add (( C B O ) ( C B O ) 1))
  399. (table acp-to-repair add (i bases 1))
  400. (table acp-to-repair add (e u* 1))
  401. (table acp-to-repair add (i ( L & / V ) 1))
  402.  
  403. (table hp-per-repair add (( / V * @ ) u* 100))
  404. (table hp-per-repair add (( L & e ) u* 50))
  405. (table hp-per-repair add (( C B O ) ( C B O ) 12))
  406. (table hp-per-repair add (i bases 20))
  407. (table hp-per-repair add (e u* 100))
  408. (table hp-per-repair add (i ( L & / V ) ( 100 50 100 25 )))
  409.  
  410. ;;; Production.
  411.  
  412. ;;; Combat.
  413.  
  414. ;                i a S r A f b d s m t j X C z B G N e  O L &  /  V  *  @
  415. (add u* hp-max ( 1 2 2 1 2 1 3 3 2 1 3 1 3 4 1 8 1 1 1 12 3 2 10 12 20 40 ))
  416.  
  417. ;FIXME in addition you can set hp-to-repair and other things to cripple a unit
  418. ;(add u* hp-at-min-speed ( 0 1 0 0 1 0 1 1 1 0 1 0 1 1 0 3 0 0 0  4  1  2  6  8 10 20 ))
  419. ; crippled is < test, not <=
  420.  
  421. ; split the matrix in half to reduce the number of entries per line
  422. (define u1 ( i  a  S  r  A  f  b  d  s  m  t  j  X ))
  423. (define u2 ( C  z  B  G  N  e  O  L  &  /  V  *  @ ))
  424.  
  425. (table hit-chance
  426.   ;         i   a   S   r   A   f   b  d  s  m  t  j  X "u1"
  427.   (i u1 (  50  40  35  90  30  20  25 20 20 30 30 80 30 ))
  428.   (a u1 (  60  50  50  85  35  25  25 25 25 25 35 85 45 ))
  429.   (S u1 (  65  60  50  90  10   7   9 10 12 15 20 80 35 ))
  430.   (r u* 0)    ; radar don't hit anything
  431.   (A u* 0)    ; Transport plane isn't armed!
  432.   (f u1 (  25  20  15  80  80  60  70 45 50 35 45 75 35 ))
  433.   (b u1 (  20  30  15  80  30  10   9 55 50 35 60 70 40 ))
  434.   (d u1 (   7   9   6  80  20  15  17 50 60 80 75 40 25 ))
  435.   (s u1 (   9  10   7  80  30  10  10 50 50 60 75 20  6 ))
  436.   (m u* 0)
  437.   (m ships ( 40 50 80 70 75 75 ))
  438.   (t u1 (   4   3   3  80  10  10  10 40 30 50 45 20  2 ))
  439.   (j u1 (   1   0   5  80  00  00   0  0  0  0  0 50  0 ))
  440.   (X u1 (  65  70  50  80  30  35  32 40 40 50 50 90 45 ))
  441.   (C u1 (  30  20  15  80  60  50  55 40 40 30 55 30 15 ))
  442.   ; z
  443.   (B u1 (  50  50  45  80  55  40  45 65 60 40 70 80 40 ))
  444.   (G u* 100)    ; missiles hit everything, modifiers ineffective
  445.   (N u* 100)    ; nukes hit everything, modifiers ineffective
  446.   (e u1 (   5   4   3  70  10   9  10 10 12 15  9 40  3 ))
  447.   (O u1 (  80  70  65  90  60  40  35 60 80 40 60 90 60 ))
  448.   (L u1 (  40  50  25  90  60  30  30 40 40 30 40 90 35 ))
  449.   (& u* 0)    ; bridges aren't armed!
  450.   (/ u1 (  10  10  15  80  60  20  20 20 20 20 20 50  7 ))
  451.   (V u1 (  25  15  30  80  70  45  35 25 20 20 30 80 12 ))
  452.   (* u1 (  30  20  35  80  85  50  40 40 20 20 45 80 20 ))
  453.   (@ u1 (  50  40  55  80  95  70  60 50 20 20 55 80 30 ))
  454.   ; second half of matrix
  455.   ;        C   z   B   G   N   e   O   L  &  /   V   *   @ "u2"
  456.   (X u2 ( 65  70  50  80  30  35  32  40 40  50 50  90  45 ))
  457.   (O u2 ( 80  20  65  90  60  60  45  80 85 80  70  65  60 ))
  458.   (i u2 ( 20   1   9  40  40  50  10  60 40 80  70  60  40 ))
  459.   (a u2 ( 20   1  20  50  50  60  30  40 50 90  80  70  50 ))
  460.   (S u2 (  1   3   4   4  30  30  20  40 70 55  40  30  20 ))
  461.   (A u2 (  5   3   0   0   0   0   3   1 10  5  10  25  30 ))
  462.   (f u2 ( 50  50  40  80  80  65  30  48 60 70  80  80  80 ))
  463.   (b u2 ( 70  10  60  50  50  20  40  70 60 90  90  90  94 ))
  464.   (d u2 ( 40   1  20   0   0   5  10  15 50 99  90  90  80 ))
  465.   (s u2 ( 40   1  50   0   0   0  10   0  6  0   0   0   0 ))
  466.   ; m
  467.   (t u2 ( 30   1   9   0   0  20   8   4 30  0   0   0   0 ))
  468.   (j u2 (  1   0   5  80  00  00   0   0  0  0   0  50   0 ))
  469.   ; X
  470.   (C u2 ( 20  10  20   8   8  30   7   0  0  0   0   0   0 ))
  471.   (B u2 ( 50  10  90   0   0  50  40  70 89 99  99  99  99 ))
  472.   ; G
  473.   ; N
  474.   (e u2 (  0   1   3  20  21  30   8  80 70 80  70  60  40 ))
  475.   (L u2 ( 20   5   9  40  40  50  60   0  0  0   0   0   0 ))
  476.   (/ u2 ( 20  20  20   0   0  10  30   0  0  0   0   0   0 ))
  477.   (V u2 ( 20  20  20   0   0  25  30   0  0  0   0   0   0 ))
  478.   (* u2 ( 20  30  20   0   0  30  35   0  0  0   0   0   0 ))
  479.   (@ u2 ( 20  40  50   0   0  50  40   0  0  0   0   0   0 ))
  480.   ;; Missiles and nukes never survive their attack.
  481.   (u* ( G N ) 100)
  482.   )
  483.  
  484. (table defend-terrain-effect 
  485.   (i ( forest swamp mountains ) 90)
  486.   )
  487.  
  488. (table damage
  489.   (u* u* 1)
  490.   (a cities 2)
  491.   (a ( a X O ) 2)
  492.   (S bases 2)
  493.   (b ships 2)
  494.   (b s 1)
  495.   (b ( / V * ) 2)
  496.   (b @ 3)
  497.   (b ground 2)
  498.   (d s 2)
  499.   (( s m ) ships 3)
  500.   (B u* 2)
  501.   (O u* 3)
  502.   (O bases 4)
  503.   (B ( V * @ ) ( 3 3 4 ))
  504.   (G u* 4)
  505.   (G ( V * @ ) ( 5 5 6 ))
  506.   (N u* 60)
  507.   (X u* 2)
  508.   )
  509.  
  510. ;FIXME true capturemoves
  511.  
  512. ;FIXME true counterattack
  513.  
  514. (table acp-to-defend add (( G N m ) u* false))
  515.  
  516. (table capture-chance
  517.   (S ( A b s t j C B N ) ( 20 15 15 26 22 4 4 18 ))    ; elite special missions
  518.   (i ( b t j C B ) ( 00 10 15 3 3 ))    ; board and capture!
  519.   ;           L  &  /  V  *  @ "bases"
  520.   (S bases ( 10 70 60 30 20 10 ))
  521.   (i bases (  5 30 70 55 50 30 ))
  522.   (a bases (  6 40 90 75 70 50 ))
  523.   (X bases (  8 90 90 75 70 60 ))
  524.   )
  525.  
  526. (add ( G N m ) acp-to-detonate 1)
  527.  
  528. (table protection
  529.   (cities movers 50)    ; cities offer some protection to occupants
  530.   (a cities 90)    ; armor protect the cities housing them.
  531.   ; can't make this too large or city can be
  532.   ; invulnerable.
  533.   (i cities 95)    ; same for infantry.
  534.   (a / 75)
  535.   (i / 85)
  536.   (L ( i a ) (75 90))
  537.   )
  538. ; ???
  539. (table protection add (bases ground 99))
  540. (table protection add (L ( e i A X O S ) 98))
  541.  
  542. ;FIXME U1 U2 -> % that U2 withdraws before U1 attacks
  543. (table withdraw-chance-per-attack add (u* ground 10))
  544. (table withdraw-chance-per-attack add (u* O 0))    ; ogres don't retreat!
  545. (table withdraw-chance-per-attack add (u* ships 5))
  546. (table withdraw-chance-per-attack add (u* aircraft 25))
  547.  
  548. (table consumption-per-attack add (u* ammo 1))
  549.  
  550. (table hit-by (u* ammo 1))
  551.  
  552. ;FIXME "destroys" ground destroy-message
  553. ;FIXME "sinks" ships destroy-message
  554. ;FIXME "shoots down" aircraft destroy-message
  555. ;FIXME "devastates" cities destroy-message
  556.  
  557. ;100 u* max-quality ;  what's the range of this?
  558. ;100 u* veteran ;  what's the range of this?
  559. ;100 u* max-morale ;  what's the range of this?
  560. ;FIXME true u* neutral    ;everything can become neutral
  561.  
  562. ;;; Other actions.
  563.  
  564. (add u* acp-to-change-side 1)    ; equipment is indifferent to its fate
  565. (add ( i a e X O S ) acp-to-change-side 0)    ; but armies have some loyalty
  566. ; Should N, e change sides? (gives away research)
  567.  
  568. ;FIXME true u* neutral
  569. ;FIXME false i neutral
  570.  
  571. (add movers acp-to-disband 1)
  572. (add ( L & / V ) acp-to-disband 1)
  573.  
  574. (add movers hp-per-disband 99)
  575. (add ( L & / V ) hp-per-disband 99)
  576.  
  577. ;100 u* efficiency ; so you can reclaim materials used to make disbanded units
  578. ; (should calc from to-build etc)
  579.  
  580. ;;; Backdrop economy.
  581.  
  582. (table base-production
  583.   (( i S m ) fuel ( 2 2 1 ))
  584.   (N fuel 20)    ; nuclear plant powers things
  585.   (e ( fuel ammo ) ( 2 1 ))
  586.   ;                L  &  /  V  *  @ "bases"
  587.   (bases fuel   (  4  1 10 15 20 50 ))
  588.   (bases ammo   (  0  1  5  8 10 20 ))
  589.   (bases people (  0  0  0  2  4  8 ))
  590.   )
  591.  
  592. ; terrain effects on material production
  593. (table productivity
  594.   (u* t* 100)    ;the default anyway!
  595.   (i ( sea desert mountains ice ) 0)
  596.   (i shallows 50)
  597.   (a plains 100)    ; in this case "plains" = "gas stations"
  598.   ; plains/forest/desert/mountains
  599.   (L land ( 100 90 70 50 ))    ; one arg must be a scalar...
  600.   (/ land ( 100 90 70 50 ))
  601.   (V land ( 100 90 70 50 ))
  602.   (* land ( 100 90 70 50 ))
  603.   (@ land ( 100 90 70 50 ))
  604.   (bases water 100)    ; Cities in water have improved transport!
  605.   (m water 100)
  606.   (N t* 100)    ; Nuke power is independant!
  607.   (cities t* 100)
  608.   )
  609.  
  610. (table base-consumption 
  611.   (movers fuel 1)    ; all consume 1 fuel, except...
  612.   (L ammo 2)
  613.   (( r m ) fuel 0)  ; these just sit quietly
  614.   (i fuel 1)
  615.   (aircraft fuel 2)    ; aircraft need lotsa fuel to stay aloft
  616.   )
  617.  
  618. ; consume-as-occupant is strange.  1 means they don't consume!
  619. (table consumption-as-occupant add (u* m* 1))
  620. (table consumption-as-occupant add (( r X S C B O ) m* 0))
  621. (table consumption-as-occupant add (aircraft m* 1))
  622. (table consumption-as-occupant add (( a m j O N ) m* 1))
  623.  
  624. ; inlength is how far away a unit can receive fuel from
  625. ; out-length is how far away a unit can deliver fuel.  Should be kept
  626. ; small, as it can waste much CPU time
  627.  
  628. (table out-length
  629.   (u* m* 0)
  630.   (bases m* 4)
  631.   (bases people 2)    ;  they will look for nearby places to expand
  632.   ; bases form good supply lines, so do transport units and big ships
  633.   (( A t j C B L & / V * @ ) fuel ( 1 1 1 1 1 2 1 2 2 3 4 ))
  634.   (( A t j C B L & / V * @ ) ammo ( 1 1 1 1 1 2 1 2 2 3 4 ))
  635.   )
  636.  
  637. (table in-length
  638.   (u* fuel 1)    ;  all units can be resupplied by adjacent units
  639.   (u* ammo 1)
  640.   (u* people -1)    ; People don't really want to migrate in war
  641.   (bases people 4)    ; except to cities, of course.
  642.   (e m* 2)    ;  They follow the engineers for jobs!
  643.   (aircraft fuel 0)    ; no mid-air refueling yet.  can't make it selective
  644.   (( L & / V * @ ) fuel ( 2 2 3 4 4 4 ))
  645.   (( L & / V * @ ) ammo ( 2 2 3 4 4 4 ))
  646.   )
  647.  
  648. ;;; Random events.
  649.  
  650. ; accidents
  651. ;FIXME surrender is U1 U2 -> .01N chance that U1 surrenders to U2
  652. ; and surrender-range is distance at which it can occur
  653. ;(table surrender-chance add (( V * @ ) u* ( 6 3 1 )))
  654. ;( 60 50 30 ) ( V * @ ) siege
  655. ;FIXME 190 bases siege    ; They have too much supply needs to withstand siege for long
  656.  
  657.  
  658. ;FIXME attrition is U T -> .01HP (rate of loss, hp/turn)
  659. (table attrition add (s ( sea shallows ice ) ( 1 5 8 )))    ; chance of attrition for the unit
  660. (table attrition add (t ( sea shallows ice ) ( 1 5 8 )))    ; chance of attrition for the unit
  661. ;FIXME "disabled at sea" ( s t ) attrition-message
  662.  
  663.  
  664. (table attrition add (( C B ) shallows 10))
  665. ;FIXME "runs aground" ( C B ) attrition-message
  666. ;FIXME accident is U T -> .01N chance that an accident happens to U
  667. ; and you can set accident-damage
  668. (table accident-hit-chance add (( A f b ) mountains ( 9 4 5 )))    ; flyers running into mountains
  669. ;FIXME "Crashes in the mountains" ( A f b ) accident-message
  670. (table accident-hit-chance add (( A f b ) mountains ( 9 4 5 )))    ; flyers running into mountains
  671. ;FIXME "Crashes in the mountains" ( A f b ) accident-message
  672. (table accident-hit-chance add (m water 2))    ; mines disappearing at sea
  673. ;FIXME "Drifts away" m accident-message
  674. (table attrition add (O shallows 10))
  675. ;FIXME "Gets stuck in mud" O attrition-message
  676.  
  677. ;FIXME spy-chance is now on a per unit basis...
  678. ; and spy-range specifies how far a unit can spy
  679. (add u* spy-chance false)    ; we don't spontaneously see all the enemies
  680. ;FIXME spy-quality is U1 U2 -> % that U1 returns info about U2
  681. (table spy-quality (u* u* false))    ; and we don't see any of them if we do!
  682.  
  683. ;FIXME I guess nuked is damaged-terrain now, T1 T2 -> N
  684. ;FIXME t* t* nuked    ; most terrain won't actually change
  685. ;FIXME desert ( plains forest ) nuked
  686. ;FIXME mountains ice nuked
  687. ;FIXME swamp shallows nuked
  688.  
  689. ;;; Scoring.
  690.  
  691. (scorekeeper (do last-side-wins))
  692.  
  693. (add ( & / V * @ ) point-value ( 100 200 800 2000 5000 ))    ;  territory values for victory pts.
  694.  
  695. ;;; Random setup.
  696.  
  697. (set synthesis-methods
  698.   '(make-fractal-percentile-terrain make-countries make-independent-units
  699.     make-initial-materials name-units-randomly))
  700.  
  701. ; storm with alt:0-33 wet:50-100 seemed a bit too much
  702. (add t* alt-percentile-min (   0  68  69  70  70  70  93  97  0 ))
  703. (add t* alt-percentile-max (  68  69  71  93  93  93  97 100  0 ))
  704. (add t* wet-percentile-min (   0   0  50   0  20  80   0   0  0 ))
  705. (add t* wet-percentile-max ( 100 100 100  20  80 100 100 100  0 ))
  706. ;(set alt-blob-density 5000)
  707. ;(set alt-blob-size 100)
  708. ;(set wet-blob-density 500)
  709. ;(set wet-blob-size 100)
  710.  
  711. (set edge-terrain ice)
  712.  
  713. (set country-radius-min 8)    ;  the radius of a 'country'
  714. (set country-separation-min 10)    ;  the closest a country may be
  715. (set country-separation-max 30)    ;  the furthest apart a country may be.
  716.  
  717. (add ( V * @ ) start-with ( 1 2 1 ))    ; units player starts with
  718. (add ( V * @ ) independent-near-start (1 1 1))
  719.  
  720. (table independent-density (( @ * V ) land ( 50 100 60 )))
  721.  
  722. (table favored-terrain
  723.   (u* t* 0)
  724.   (( V * @ ) land 20)
  725.   (( V * @ ) plains 40)
  726.   (e t* 10)    ; engineers can go anywhere!
  727.   (@ plains 100)
  728.   )
  729.  
  730. (add u* initial-seen-radius 7)
  731.  
  732. (include "nat-names")
  733.  
  734. (add cities namer "random-town-names")
  735.  
  736. (include "town-names")
  737.  
  738. ; should add naming for C and B
  739.  
  740. ;;; Documentation.
  741.  
  742. (game-module (instructions (
  743.   )))
  744.  
  745. (game-module (notes (
  746.   )))
  747.  
  748. (game-module (design-notes (
  749.   )))
  750.  
  751. ; Hand this to a Lisp system, use for calculations...
  752. ; (defun res (res prod)
  753. ;    (setq res (- res (floor (* prod .2))))
  754. ;    (ceiling (* (/ res (floor (* prod 1.2))) 100)))
  755.  
  756. ; (defun restime (prod res) (floor (/ (* (floor (* prod 1.2)) (+ res 100)) 100)))
  757.